package com.ruibang.glass.sale.service;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.Date;

@Service
public class SerialDisputeNumberGenerator {
    private static final int MAX_SEQUENCE = 9999;
    private static final int SEQUENCE_LENGTH = 2; // 因为序列号只到99，所以长度为2
    private static final String DATE_FORMAT = "yyyyMMdd";

    public static String generateNextSerialNumber(String originalSerialNumber) {

        // 获取当前日期并格式化为yyyyMMdd
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
        String currentDate = sdf.format(new Date());
        if (StringUtils.isEmpty(originalSerialNumber)) {
            return currentDate + "01";
        }
        String sequencePart = originalSerialNumber.substring(8, 12);

        // 将序列号转换为整数并加1
        int seqInt = Integer.parseInt(sequencePart);
        if (seqInt == 9999) {
            return currentDate + "01";
        }
        int newSeqInt = (seqInt + 1) % (MAX_SEQUENCE + 1); // 使用(MAX_SEQUENCE + 1)确保取模后得到0-99的范围

        // 格式化新的序列号
        String newSequencePart = String.format("%0" + SEQUENCE_LENGTH + "d", newSeqInt);

        // 如果序列号回到了1，则使用当前日期作为新日期部分
        if (newSeqInt == 1) {
            // 如果当前日期与原始日期不同，则更新日期部分（但实际上我们总是使用当前日期，所以这里其实不会改变什么）
            currentDate = sdf.format(new Date()); // 这里其实可以省略，因为我们始终使用当前日期
        }

        // 构建新的编号
        String newSerialNumber = currentDate + newSequencePart;
        return newSerialNumber;
    }

    public static void main(String[] args) {
        // 假设上次的编号是 PA2024020199
        String lastSerialNumber = "202405130100";
        String nextSerialNumber = generateNextSerialNumber(lastSerialNumber);
        System.out.println(nextSerialNumber); // 输出应该是 PA当前日期01 或类似（取决于当前日期）
    }
}

